package site.addzero.cli.autoinit.common

import org.koin.core.annotation.Single
import site.addzero.cli.platform.PlatformTools
import site.addzero.cli.platform.PlatformType
import site.addzero.cli.platform.runCmd
import site.addzero.cli.setting.SettingContext
import site.addzero.task.InitTask
import java.io.File

/**
 * 夸克网盘客户端自动初始化类
 * 负责下载夸克网盘客户端到 USEFUL_SOFT_DIR 目录
 */
@Single
class AutoInitQuark : InitTask {
    override val support: Boolean = true

    // 夸克网盘客户端下载 URLs
    private val quarkDownloadUrls = mapOf(
        PlatformType.MACOS to "https://pc-download.quark.cn/download/37214/quarkmac/pcquark@default/QuarkMac_V4.6.0.558_mac_pf30004_(zh-cn)_release_(Build2491742).dmg?response-content-disposition=attachment;%20filename=%22Quark_V4.6.0.558%40%40%40dapi-7c1614e4-dd79-45a9-9d2e-45a664bcefeb%40%40%40.dmg%22;filename*=UTF-8%27%27Quark_V4.6.0.558%40%40%40dapi-7c1614e4-dd79-45a9-9d2e-45a664bcefeb%40%40%40.dmg",
        PlatformType.WINDOWS to "https://pc-download.quark.cn/download/37214/quarkwin/pcquark@default/QuarkWin_V4.6.0.558_win_pf30004_(zh-cn)_release_(Build2491742).exe",
        PlatformType.LINUX to "" // Linux 版本暂时没有提供
    )

    private val quarkFilenames = mapOf(
        PlatformType.MACOS to "QuarkMac_V4.6.0.558.dmg",
        PlatformType.WINDOWS to "QuarkWin_V4.6.0.558.exe",
        PlatformType.LINUX to "" // Linux 版本暂时没有提供
    )

    /**
     * 执行夸克网盘客户端初始化任务
     */
    override suspend fun asynctask(): Boolean {
        println("正在初始化夸克网盘客户端...")

        // 确保 useful 目录存在
        val usefulDir = File(SettingContext.USEFUL_SOFT_DIR)
        if (!usefulDir.exists()) {
            usefulDir.mkdirs()
        }

        // 获取当前平台类型
        val platformType = PlatformTools.getPlatformType()
        
        // 检查是否支持当前平台
        if (!quarkDownloadUrls.containsKey(platformType) || quarkDownloadUrls[platformType].isNullOrEmpty()) {
            println("当前平台不支持夸克网盘客户端下载")
            return true
        }

        // 下载夸克网盘客户端
        val downloadUrl = quarkDownloadUrls[platformType] ?: return false
        val filename = quarkFilenames[platformType] ?: return false
        val downloadPath = "$usefulDir${File.separator}$filename"

        // 检查是否已经下载
        if (File(downloadPath).exists()) {
            println("夸克网盘客户端已存在，跳过下载")
            return true
        }

        return downloadQuarkClient(downloadUrl, downloadPath)
    }

    /**
     * 下载夸克网盘客户端
     * @param url 下载 URL
     * @param destPath 目标路径
     * @return 是否下载成功
     */
    private fun downloadQuarkClient(url: String, destPath: String): Boolean {
        try {
            println("正在下载夸克网盘客户端...")
            
            val platformType = PlatformTools.getPlatformType()
            val downloadResult = when (platformType) {
                PlatformType.MACOS, PlatformType.LINUX -> {
                    // 使用 curl 下载 (macOS/Linux)
                    "curl -L -o \"$destPath\" \"$url\"".runCmd()
                }
                PlatformType.WINDOWS -> {
                    // 使用 PowerShell 下载 (Windows)
                    "powershell -Command \"(New-Object Net.WebClient).DownloadFile('$url', '$destPath')\"".runCmd()
                }
                else -> {
                    println("不支持的平台")
                    return false
                }
            }

            if (downloadResult.isSuccess()) {
                println("夸克网盘客户端下载成功: $destPath")
                return true
            } else {
                println("夸克网盘客户端下载失败: ${downloadResult.error}")
                return false
            }
        } catch (e: Exception) {
            println("下载夸克网盘客户端时出错: ${e.message}")
            return false
        }
    }
}